package problem.year2021.january;

/**
 * 在一个 XY 坐标系中有一些点，我们用数组 coordinates 来分别记录它们的坐标，其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。
 * <p>
 * 请你来判断，这些点是否在该坐标系中属于同一条直线上，是则返回 true，否则请返回 false。
 */
public class January17 {
    public boolean checkStraightLine(int[][] coordinates) {
        if (coordinates.length <= 2) return true;
        // 计算斜率k
        int[] node1 = coordinates[0];
        int[] node2 = coordinates[1];
        double k;
        if ((node1[0] - node2[0]) == 0) {
            k = 0;
            for (int j = 2; j < coordinates.length; j++) {
                if (coordinates[j][0] - node1[0] != k) return false;
            }
            return true;
        } else {
            k = (node1[1] - node2[1]) * 1.0 / (node1[0] - node2[0]);
            for (int i = 2; i < coordinates.length; i++) {
                double k2 = (coordinates[i][1] - node1[1]) * 1.0 / (coordinates[i][0] - node1[0]);
                if (k2 != k) {
                    return false;
                }

            }
            return true;
        }
    }

    public static void main(String[] args) {
        int[][] ints = new int[][]{{2, 4}, {2, 5}, {2, 8}};
        boolean b = new January17().checkStraightLine(ints);
        System.out.println(b);
    }
}
